//
//  AlbumDetailsViewController.m
//  Atlantis
//
//  Created by 何恩营 on 14-12-17.
//  Copyright (c) 2014年 lanou3g.com 蓝鸥科技. All rights reserved.
//

// 专辑详情页面
#import "AlbumDetailsViewController.h"
#import "NetHandler.h"
#import "Music.h"
#import "MusicCell.h"
#import "PlayViewController.h"
#import "UIImageView+WebCache.h"
#import "RedioHostViewController.h"
#import "RelatedAlbumViewController.h"
#import "UIColor+AddColor.h"

// 刷新
#import "UIScrollView+Extension.h"
#import "UIScrollView+MJRefresh.h"

#define REUSE @"reuse"

@interface AlbumDetailsViewController ()<UITableViewDataSource, UITableViewDelegate>

// 专辑详情对象
@property(nonatomic, retain) Album *albumDetail;
// 专辑中得音频数组
@property(nonatomic, retain) NSMutableArray *tracksArr;
// 表视图
@property(nonatomic, retain) UITableView *tableView;
// 播主信息
@property(nonatomic, retain) UIView *nickView;
// 播主头像
@property(nonatomic, retain) UIImageView *nickImageView;
// 播主昵称
@property(nonatomic, retain) UILabel *nickLabel;

// 页数
@property(nonatomic, assign) NSInteger page;



@end

@implementation AlbumDetailsViewController


// 内存管理
- (void)dealloc
{
    // 专辑对象
    [_album release];
    // 专辑详情
    [_albumDetail release];
    // 专辑中得音频数组
    [_tracksArr release];
    // 表视图
    [_tableView release];
    // 播主信息
    [_nickView release];
    // 播主头像
    [_nickImageView release];
    // 播主昵称
    [_nickLabel release];
    [super dealloc];
}


// 下拉刷新, 上拉加载更多
- (void)setupRefresh
{
    //    NSLog(@"进入了setupRefresh");
    // 1.下拉刷新(进入刷新状态就会调用self的headerRereshing)
    
    [self.tableView addHeaderWithTarget:self action:@selector(headerRereshing)];
    //进入刷新状态(一进入程序就下拉刷新)
    [self.tableView headerBeginRefreshing];
    
    
    // 2.上拉加载更多(进入刷新状态就会调用self的footerRereshing)
    [self.tableView addFooterWithTarget:self action:@selector(footerRereshing)];
}

#pragma mark 开始进入刷新状态
- (void)headerRereshing
{
    UIView *view = [[UIView alloc] initWithFrame:self.view.bounds];
    view.backgroundColor = [UIColor clearColor];
    [self.view addSubview:view];
    [view release];
    //1. 在这调用请求网络数据方法（刷新数据）
    self.page = 1;
    [self handleData];
    //2. 2秒后刷新表格UI
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 刷新表格
        //[self.tableView reloadData];
        [view removeFromSuperview];
        // (最好在刷新表格后调用)调用endRefreshing可以结束刷新状态
        [self.tableView headerEndRefreshing];
    });
}

//   进入加载状态
- (void)footerRereshing
{
    self.page += 1;
    //1. 拼接口等操作
    // 请求加载数据
    [self footerHandle];
    //    NSLog(@"%@", self.albumArr);
    //
    //    [tempArr addObjectsFromArray:self.albumArr];
    //    self.albumArr = tempArr;
    
    // 2.2秒后刷新表格UI
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 刷新表格
        
        // (最好在刷新表格后调用)调用endRefreshing可以结束刷新状态
        [self.tableView reloadData];
        [self.tableView footerEndRefreshing];
    });
}


// 处理数据
- (void)handleData
{
    // 创建网络请求
    NSString *str = [NSString stringWithFormat:@"http://mobile.ximalaya.com/mobile/others/ca/album/track/%@/true/%ld/30?device=iPhone", self.album.albumId, self.page];
    // 建立网络请求
    [NetHandler getDataWithURL:str completion:^(NSData *data) {
        id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        
        // 创建专辑详情并赋值
        self.albumDetail = [[[Album alloc] initWithDictionary:[result objectForKey:@"album"]] autorelease];
        // 播主头像赋值
        [self.nickImageView setImageWithURL:[NSURL URLWithString:self.albumDetail.avatarPath]];
        // 播主昵称赋值
        self.nickLabel.text = [self.albumDetail.nickname stringByAppendingString:@" 创建"];
    
        
        // 创建字典并赋值
        NSDictionary *tracksDic = [result objectForKey:@"tracks"];
        // 创建数组并赋值
        NSArray *listArr = [tracksDic objectForKey:@"list"];
        // 创建数组
        self.tracksArr = [NSMutableArray array];
        // 遍历数组
        for (NSDictionary *tempDic in listArr) {
            // 创建对象
            Music *music = [[Music alloc] initWithDictionary:tempDic];
            // 将对象存放到数组中
            [self.tracksArr addObject:music];
            // 内存管理
            [music release];
        }
        // 刷新页面
        [self.tableView reloadData];
        [self setupRefresh];
    }];
    
    
}

- (void)footerHandle
{
    // 创建网络请求
    NSString *str = [NSString stringWithFormat:@"http://mobile.ximalaya.com/mobile/others/ca/album/track/%@/true/%ld/30?device=iPhone", self.album.albumId, self.page];
    // 建立网络请求
    [NetHandler getDataWithURL:str completion:^(NSData *data) {
        id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
        // 创建字典并赋值
        NSDictionary *tracksDic = [result objectForKey:@"tracks"];
        // 创建数组并赋值
        NSArray *listArr = [tracksDic objectForKey:@"list"];
        // 遍历数组
        for (NSDictionary *tempDic in listArr) {
            // 创建对象
            Music *music = [[Music alloc] initWithDictionary:tempDic];
            // 将对象存放到数组中
            [self.tracksArr addObject:music];
            // 内存管理
            [music release];
        }
    }];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    // 设置导航栏的标题
    self.navigationItem.title = self.album.title;
    self.page = 1;
    // 调用处理数据
    [self handleData];
    //NSLog(@"*********%@", self.albumDetail.title);
    
    // 创建播主信息并设置大小
    self.nickView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 100)];
    [_nickView release];
    // 创建专辑图片并设置大小
    UIImageView *albumImage = [[UIImageView alloc] initWithFrame:CGRectMake(10, 5, self.nickView.frame.size.height - 10, self.nickView.frame.size.height - 10)];
    // 专辑图片视图的背景颜色
    albumImage.backgroundColor = [UIColor whiteColor];
    // 专辑图片视图的图片
    [albumImage setImageWithURL:[NSURL URLWithString:self.album.coverLarge]];
    // 将专辑图片视图加载到主播信息视图上
    [self.nickView addSubview:albumImage];
    // 内存管理
    [albumImage release];
    
    
    
    // 创建播主头像并设置大小
    self.nickImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.nickView.frame.size.height + 10, 10, self.nickView.frame.size.height - 70, self.nickView.frame.size.height - 70)];
    // 设置播主头像的背景颜色
    self.nickImageView.backgroundColor = [UIColor whiteColor];
    // 头像设为圆形
    self.nickImageView.layer.cornerRadius = self.nickImageView.frame.size.height / 2;
    self.nickImageView.layer.masksToBounds = YES;
    // 将播主头像的视图加载到播主信息的视图上
    [self.nickView addSubview:self.nickImageView];
    // 内存管理
    [_nickImageView release];
    
    
    
    // 创建播主昵称并设置大小
    self.nickLabel = [[UILabel alloc] initWithFrame:CGRectMake(self.nickView.frame.size.height * 2 - 60, 10, self.nickView.frame.size.width - self.nickView.frame.size.height * 2 + 40, self.nickView.frame.size.height - 70)];
    // 设置播主昵称的背景颜色
    self.nickLabel.backgroundColor = [UIColor whiteColor];
    // 设置播主昵称的字体大小
    self.nickLabel.font = [UIFont fontWithName:nil size:18];
    // 播主昵称字体居中
    //self.nickLabel.textAlignment = NSTextAlignmentCenter;
    // 将播主昵称的视图加载到播主信息视图上
    [self.nickView addSubview:self.nickLabel];
    // 内存管理
    [_nickLabel release];
    
    
    // 创建访问播主图标并设置大小
    UIImageView *visitNickImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.nickView.frame.size.height + 10, self.nickView.frame.size.height - 40, 30, self.nickView.frame.size.height - 70)];
    // 访问播主图标的背景颜色
    //visitNickImageView.backgroundColor = [UIColor redColor];
    // 访问播主图标的图片赋值
    visitNickImageView.image = [UIImage imageNamed:@"run.gif"];
    // 将访问播主图标的视图加载到播主信息视图上
    [self.nickView addSubview:visitNickImageView];
    // 内存管理
    [visitNickImageView release];
    
    
    
    // 创建访问播主按钮
    UIButton *visitNickButton = [UIButton buttonWithType:UIButtonTypeSystem];
    // 设置访问播主按钮的大小
    visitNickButton.frame = CGRectMake(self.nickView.frame.size.height + 40, self.nickView.frame.size.height - 40, 80, self.nickView.frame.size.height - 70);
    // 设置访问播主按钮的背景颜色
    visitNickButton.backgroundColor = [UIColor whiteColor];
    // 设置访问播主按钮的字体大小
    visitNickButton.titleLabel.font = [UIFont fontWithName:nil size:17];
    // 访问播主按钮的按钮标题
    [visitNickButton setTitle:@"访问播主" forState:UIControlStateNormal];
    // 实现访问播主按钮的方法
    [visitNickButton addTarget:self action:@selector(visitNickButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    // 将访问播主按钮的视图加载到播主信息视图上
    [self.nickView addSubview:visitNickButton];
    
    
    // 创建表视图
    self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
    // 赋值
    self.tableView.tableHeaderView = self.nickView;
    // 无分割线
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    // 指定代理人
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    // 将表视图加载到视图上
    [self.view addSubview:self.tableView];
    // 设置表视图cell的高度
    self.tableView.rowHeight = 120;
    // 内存管理
    [_tableView release];
        
    
    // 注册表视图cell的重用池
    [self.tableView registerClass:[MusicCell class] forCellReuseIdentifier:REUSE];
    

    
    // 导航栏左侧返回按钮
    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"return.png"] style:UIBarButtonItemStyleDone target:self action:@selector(collectionAction:)] autorelease];
    
    
}


// 导航栏左侧返回按钮触发事件
- (void)collectionAction:(UINavigationBar *)bar
{
    //NSLog(@"返回前一页");
    // 推出前一页
    [self.navigationController popViewControllerAnimated:YES];
}



// 访问播主按钮实现事件
- (void)visitNickButtonClicked:(UIButton *)button
{
    //NSLog(@"访问播主");
    // 创建播主界面
    RedioHostViewController *redioHostVC = [[RedioHostViewController alloc] init];
    // 赋值
    redioHostVC.album = self.albumDetail;
    // 推出页面
    [self.navigationController pushViewController:redioHostVC animated:YES];
    // 内存管理
    [redioHostVC release];
    
}



// cell的个数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.tracksArr.count;
}

// cell的赋值
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 创建自定义cell
    MusicCell *cell = [tableView dequeueReusableCellWithIdentifier:REUSE];
    // 创建对象
    Music *music = [self.tracksArr objectAtIndex:indexPath.row];
    // 赋值
    cell.music = music;
    
    
    return cell;
    
}

// 表视图的头标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return @"列表";
}

// 表视图的section的头标题
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    // 创建section头部视图 - 内存管理
    UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 25)] autorelease];
    // 设置视图背景颜色
    view.backgroundColor = [UIColor colorFromHexCode:@"BDC3C7"];

    
    // 创建文本视图
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, view.bounds.size.width - 80, view.bounds.size.height)];
    // 字体居中
    label.textAlignment = NSTextAlignmentCenter;
    // 文本赋值
    label.text = @"播放列表";
    // 将文本视图加载到section头部视图
    [view addSubview:label];
    // 内存管理
    [label release];
    
    
    // 创建按钮
    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
    // 设置按钮位置大小
    button.frame = CGRectMake(label.bounds.size.width, 0, 80, view.bounds.size.height);
    // 按钮显示文字
    [button setTitle:@"相关专辑" forState:UIControlStateNormal];
    // 相关专辑按钮触发事件
    [button addTarget:self action:@selector(buttonClickerAction:) forControlEvents:UIControlEventTouchUpInside];
    // 将按钮加载到section的头部视图上
    [view addSubview:button];
    
    // 返回section的头部视图
    return view;
}


// 相关专辑按钮实现事件
- (void)buttonClickerAction:(UIButton *)button
{
    // 创建相关专辑页面
    RelatedAlbumViewController *related = [[RelatedAlbumViewController alloc] init];
    // 赋值
    related.album = self.albumDetail;
    // 推出界面
    [self.navigationController pushViewController:related animated:YES];
    // 内存管理
    [related release];
}

// 点击cell实现方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    // 创建播放视图
    PlayViewController *playVC = [PlayViewController sharePlayVC];
    
    // 获取对象值
    Music *music = [self.tracksArr objectAtIndex:indexPath.row];
    
    // 判断是否播放同一音频
    if (![playVC.music.trackId isEqual:music.trackId]) {
        playVC.music = music;
        // 页面传值
        playVC.musicArr = self.tracksArr;
        playVC.currentMusic = indexPath.row;
        // 播放
        [playVC play];
    }
    // 推出界面
    [self.navigationController pushViewController:playVC animated:YES];

}


//- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
//{
//    Music *temp = [self.tracksArr objectAtIndex:indexPath.row];
//
//    NSString *title = temp.title;
//
//    NSDictionary *dic = @{NSFontAttributeName: [UIFont systemFontOfSize:17]};
//
//    CGRect rect = [title boundingRectWithSize:CGSizeMake(tableView.frame.size.width - 120, 10000) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil];
//
//    return rect.size.height;
//
//
//}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
 #pragma mark - Navigation
 
 // In a storyboard-based application, you will often want to do a little preparation before navigation
 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 // Get the new view controller using [segue destinationViewController].
 // Pass the selected object to the new view controller.
 }
 */

@end
